﻿using System;
using System.Text;
using System.Drawing;
using System.Buffers;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;

public static partial class glDRIVE
{
    /*
    函数 gl.euler2
    求解二阶初值连分式法
    改进欧拉公式以h为步长积分m步
    f计算二阶微分方程的右端函数f(t,y,z)。
    参数 t: 自变量起点值
    参数 h: 步长
    参数 y: 存放函数初值。返回终点函数值。
    参数 z: 存放函数一阶导数初值。返回终点函数一阶导数值。
    参数 m: 步数
    */

    public static string drive_euler2()
    {
        int j;
        double t, h, eps, y, z;

        y = 0.0;
        z = 0.701836;
        t = 0.0;
        h = 0.1;
        eps = 0.0000001;

        double[] ya = new double[1] { y };
        double[] za = new double[1] { z };

        string rs = "";
        rs = gl.html_table("t,y,z", new double[] { t, y, z });

        gl.f_abc = euler2_f;
        for (j = 1; j <= 10; j++)
        {
            gl.euler2(t, h, ya, za, eps);
            rs = gl.html_table("t,y,z", new double[] { t, ya[0], za[0] });
            t = t + h;
        }
        return rs;
    }

    // 计算二阶微分方程右端函数f(t,y,z)
    private static double euler2_f(double t, double y, double z)
    {
        double d;
        d = t + y;
        return (d);
    }
}